package com.zz.admin.userManagement.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zz.admin.userManagement.dto.UserDto;
import com.zz.admin.userManagement.dto.UserRoleMenuDto;
import com.zz.admin.userManagement.entity.User;
import com.zz.common.base.dto.PageListResultDto;
import com.zz.common.base.param.QueryParam;

import java.util.List;

/**
 * 用户表 服务接口
 *
 * @author zhang.lei
 * @since 2025-04-08 19:52:27
 */
public interface UserService extends IService<User> {

    /**
     * 分页查询
     *
     * @param userDto 查询参数
     * @return PageListResultDto<UserDto>
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    PageListResultDto<UserDto> queryWithPage(UserDto userDto, QueryParam queryParam);

    /**
     * 分页查询
     *
     * @param userDto 查询参数
     * @return List<UserDto>
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<UserDto> queryWithNoPage(UserDto userDto);

    /**
     * 根据id查询
     *
     * @param id 主键
     * @return UserDto
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    UserDto queryById(String id);

    /**
     * 根据name查询
     */
    UserDto getAdminUser();

    /**
     * 根据登录账号查询
     *
     * @param loginAccount 登陆账号
     */
    UserDto queryByLoginAccount(String loginAccount);

    /**
     * 根据主键查询单表数据
     *
     * @param id 主键
     * @return List<UserDto>
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<UserDto> queryByIds(List<String> id);

    /**
     * 保存
     *
     * @param userDto 对象
     * @return UserDto
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    UserDto save(UserDto userDto);

    /**
     * 批量保存
     *
     * @param userDtos 对象
     * @return List<UserDto>
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<UserDto> saveBatch(List<UserDto> userDtos);

    /**
     * 修改
     *
     * @param userDto 对象
     * @return UserDto
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    UserDto modify(UserDto userDto);

    /**
     * 批量修改
     *
     * @param userDtos 对象
     * @return List<UserDto>
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    List<UserDto> modifyBatch(List<UserDto> userDtos);

    /**
     * 删除
     *
     * @param id 主键
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    void delete(String id);

    /**
     * 删除
     *
     * @param ids 主键
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    void deleteBatch(List<String> ids);

    /**
     * 插入
     *
     * @param userDto 对象
     * @return UserDto
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    UserDto insert(UserDto userDto);

    /**
     * 指定主键插入
     *
     * @param userDto 对象
     * @return UserDto
     * @create: 2025-04-08 19:52:27
     * @author zhang.lei
     * @see
     * @since 1.0
     */
    UserDto insertWithId(UserDto userDto);


    /**
     * 根据用户id查询角色和菜单
     *
     * @param userId 用户id
     * @return List<UserRoleMenuDto>
     */
    List<UserRoleMenuDto> queryRoleAndMenuByUserId(String userId);

    /**
     * 根据第三方用户id和名称添加用户
     *
     * @param thirdPartyUserId
     * @param thirdPartyUserName
     * @return
     */
    UserDto insertFromThirdParty(String thirdPartyUserId, String thirdPartyUserCode, String thirdPartyUserName);
}
